#ifndef _RMS_TOML_ // for debug

#include <windows.h>
#include <sstream>

#include "SystemTime.h"

std::string get_string_from_systemtime(const SYSTEMTIME& st, const char * timezone=NULL)
{
	std::ostringstream s;
	s.fill('0');
	s.width(2);
	s << st.wDay << '.';
	s.width(2);
	s << st.wMonth << '.';
	s.width(4);
	s << st.wYear << ' ';
	s.width(2);
	s << st.wHour << ':';
	s.width(2);
	s << st.wMinute << ':';
	s.width(2);
	s << st.wSecond; // << '.';
//	s.width(3);
//	s << st.wMilliseconds;
//	if (timezone) {
//		s << " " << timezone;
//	}	
	return s.str();
}

std::string SystemTime::get_utc_string() const
{
	SYSTEMTIME st;
	FileTimeToSystemTime(&filetime,&st);
	return get_string_from_systemtime(st,"UTC");	
}

std::string SystemTime::get_string() const
{
	SYSTEMTIME st;
	FILETIME localfiletime;
	FileTimeToLocalFileTime(&filetime,&localfiletime);
	FileTimeToSystemTime(&localfiletime,&st);
	return get_string_from_systemtime(st);
}

std::string SystemTime::get_db_string() const
{
	SYSTEMTIME st;
	FILETIME localfiletime;
	FileTimeToLocalFileTime(&filetime,&localfiletime);
	FileTimeToSystemTime(&localfiletime,&st);
	
	std::ostringstream s;
	s.fill('0');
	s.width(2);
	s << st.wMonth << '.';
	s.width(2);
	s << st.wDay << '.';
	s.width(4);
	s << st.wYear << ' ';
	s.width(2);
	s << st.wHour << ':';
	s.width(2);
	s << st.wMinute << ':';
	s.width(2);
	s << st.wSecond << '.';
	s.width(3);
	s << st.wMilliseconds;
	return s.str();
}

SystemTime& SystemTime::set_cur_time()
{
	GetSystemTimeAsFileTime(&filetime);
	return *this;
}

std::ostream& put_useconds(std::ostream& s, longlong systime)
{
	char c=s.fill('0');
	s << (long)(systime/10000000i64) << '.';
	s.width(3);
	s << (short)((systime/10000i64)%1000);
	s.fill(c);
	return s;
}

std::ostream& operator<< (std::ostream& s, const SystemTime& systime)
{
	return s << '[' << systime.get_string() << "] ";
}

#endif